import axios from 'axios'
//创建Axios 请求实例

//axios.defaults.timeout = 10000 //超时取消请求
//axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'
//axios.defaults.baseURL = process.env.BASE_URL //挂载在process下的环境常量，在我另一篇文章有详细说明
const axios_instance = axios.create({
    baseURL: process.env.VUE_APP_API_URL, // 设置跨域代理接口统一的前置地址  http://localhost:3000/users
    timeout: 1000,
    headers: {
        'Content-Type': 'application/json; charset=utf-8' //get效果是无效果的
    },
    withCredentials: false //是否允许携带凭证（cookie）
})

// 添加请求拦截器 (为了携带token)
axios_instance.interceptors.request.use(
    config => {
        let token = window.localStorage.getItem("token"); //建议从vuex获取 这里偷懒 了
        if (token) {
            config.headers['Authorization_Token'] = token; // key =Authorization_Token

        }

        return config;
    },
    error => {
        return Promise.error(error);
    }


);

// 添加响应拦截器
axios_instance.interceptors.response.use(
    //lamda 表达式
    response => {
        //这个Http状态码
        if (response.status >= 200 && response.status < 210) {
            //这是业务状态码 response.data 是返回后台json对象

            if (response.data.code) {
                if (response.data.code >= 200 && response.data.code < 210) {
                    return Promise.resolve(response.data); //往then走
                } else {
                    return Promise.reject(response.data);
                }

            } else {
                return Promise.resolve(response.data);
            }



        } else {
            console.log("请求不是200");
            return Promise.reject(response);
        }

    },
    error => {
        //http状态码
        if (error.response) {
            switch (error.response.status) {

                case 401:
                    alert("权限不足");
                    break;
                case 404:
                    console.log("URL 路径不对 ,没有找到对应的URL");
                    break;
                case 405:
                    console.log("请求的Method不对");
                    break;

                default:
                    console.log("未知错误 ");
                    break;
            }
        } else {
            console.log("执行了这里");
        }

        return Promise.reject(error);


    }


);
//然后封装http方法
export default {
    request: function(options) {
        return new Promise((resolve, reject) => {
            axios_instance({
                method: options.method,
                url: options.url,
                data: options.method.toLowerCase() !== 'get' ? options.params : undefined,
                params: options.method.toLowerCase() === 'get' ? options.params : undefined

            }).then(res => {
                resolve(res);
            }).catch(err => {
                console.log(err, '异常');
                reject(err);
            });

        });
    }



}